package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/longest-nice-substring/'>最长的美好子字符串(Longest Nice Substring)</a>
 * <p>当一个字符串 s 包含的每一种字母的大写和小写形式 同时 出现在 s 中，就称这个字符串 s 是 美好 字符串。比方说，"abABB" 是美好字符串，因为 'A' 和 'a' 同时出现了，且 'B' 和 'b' 也同时出现了。然而，"abA" 不是美好字符串因为 'b' 出现了，而 'B' 没有出现。</p>
 * <p>给你一个字符串 s ，请你返回 s 最长的 美好子字符串 。如果有多个答案，请你返回 最早 出现的一个。如果不存在美好子字符串，请你返回一个空字符串。</p>
 *
 * <p>
 * <b>示例</b>
 * <pre>
 * 示例 1：
 *      输入：s = "YazaAay"
 *      输出："aAa"
 *      解释："aAa" 是一个美好字符串，因为这个子串中仅含一种字母，其小写形式 'a' 和大写形式 'A' 也同时出现了。
 *      "aAa" 是最长的美好子字符串。
 *
 * 示例 2：
 *      输入：s = "Bb"
 *      输出："Bb"
 *      解释："Bb" 是美好字符串，因为 'B' 和 'b' 都出现了。整个字符串也是原字符串的子字符串。
 *
 * 示例 3：
 *      输入：s = "c"
 *      输出：""
 *      解释：没有美好子字符串。
 *
 * 示例 4：
 *      输入：s = "dDzeE"
 *      输出："dD"
 *      解释："dD" 和 "eE" 都是最长美好子字符串。
 *      由于有多个美好子字符串，返回 "dD" ，因为它出现得最早。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *  <ul>
 *      <li>1 <= s.length <= 100</li>
 *      <li>s 只包含大写和小写英文字母。</li>
 *  </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/25 11:05
 */
public class LC1763LongestNiceSubstring_S {

    static class Solution {
        public String longestNiceSubstring(String s) {
            char[] chars = s.toCharArray();
            String res = "";
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < chars.length - 1; i++) {
                if (stringBuilder.length() == 0) {
                    stringBuilder.append(chars[i]);
                }
                // 如果相等，值+1
                if (chars[i] == chars[i + 1]) {
                    stringBuilder.append(chars[i + 1]);
                }
                // 如果是匹配的大写或者匹配的小写，值+1并更新结果
                else if (chars[i] + 32 == chars[i + 1] || chars[i] - 32 == chars[i + 1]) {
                    stringBuilder.append(chars[i + 1]);
                    if (stringBuilder.length() > res.length()) {
                        res = stringBuilder.toString();
                    }
                }
                // 不匹配，清空值，进行下一轮
                else {
                    stringBuilder = new StringBuilder();
                }
            }
            return res;
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.longestNiceSubstring("YazaAay"));
        System.out.println(solution.longestNiceSubstring("Bb"));
        System.out.println(solution.longestNiceSubstring("c"));
        System.out.println(solution.longestNiceSubstring("dDzeE"));
    }
}
